<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <script>

        // RegExp 
        // 正则表达式的作用：匹配特殊字符或有特殊搭配原则的字符的最佳选择
        // 判断字符串满不满足要求，比如密码邮箱的格式

        // 我的理解，正则表达式就是规定的字符串所符合的规则
        var reg = /abc/; // 正则表达式abc，字面量的写法
        var reg1 = /abc/i; //忽视大小写,执行对大小写不敏感的匹配
        var reg2 = /abc/m; // 修饰符m，只针对左尖角符号限制第一位必须是a，对于换行之后的第一位也算
        var reg3 = /abc/g; // 执行全局匹配
        var reg4 = /abc/im;
        var reg5 = /abc/ig;
        var reg6 = /abc/igm; //可以随便组合

        console.log(reg);

        var str = "abcde";
        var str1 = "ab cd ef";
        reg.test(str);  // 测验一下字符串中有没有我想要的片段
        // 返回 true
        reg.test(str1);  //返回 false


        // 构造函数构建
        var str11 = "abcd";
        var reg11 = new RegExp("abc", "igm");
        console.log(reg11.test(str11));  //返回true ，判断字符串中包不包含"abc"

        var reg22 = new RegExp(reg); // 返回新的对象，两个对象长得一样，互相独立
        var reg33 = RegExp(reg); // 两个对象地址相同


        // 修饰符
        var reg3 = /abcaa/g; // 执行全局匹配
        var str3 = "mnabcabcabcabcabababcabb";
        console.log(str3.match(/abcdd/)); // 找到第一个匹配后停止，不是全局匹配执行的结果是类似类数组，如果一个都没有匹配到，返回null
        console.log(str3.match(reg3)); //返回所有的匹配，数组 ,如果一个都没有匹配到，返回null

    </script> -->

    <script>
        
        var reg = /^a/g; // a必须是字符串的开头
        var reg1 = /^a/gm; // m 执行多行匹配，意思是换行之后的第一位也算开头
        var reg2 = / b/g; // 空格直接写
        var str = "abssdadha";
        var str1 = "abssd\nadh\
        b";
        console.log(str.match(reg)); // 只返回开头的a
        console.log(str1.match(reg)); //没有多行匹配的功能，还是只返回一个，注意全局匹配返回的不是类似类数组
        console.log(str1.match(reg1)); // 返回2个a
        // test方法只能返回 true 和 false

        console.log(str1.match(reg2));
    </script>
</body>
</html>